import 'dart:convert';

import 'package:get/get.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:gluz/app/routes/app_pages.dart';

class WebViewController extends GetxController {
  // 加载状态
  final isLoading = true.obs;
  final canGoBack = false.obs;
  final canGoForward = false.obs;
  final currentUrl = ''.obs;
  final title = ''.obs;
  
  // WebView控制器
  InAppWebViewController? webViewController;
  
  // 初始URL
  String initialUrl = '';
  
  // JavaScript回调函数映射
  final Map<String, Function> jsCallbacks = <String, Function>{};
  
  @override
  void onInit() {
    super.onInit();
    // 从参数中获取初始URL
    if (Get.arguments != null && Get.arguments['url'] != null) {
      initialUrl = Get.arguments['url'];
    }
  }
  
  @override
  void onReady() {
    super.onReady();
  }
  
  @override
  void onClose() {
    super.onClose();
  }
  
  // 设置WebView控制器
  void setWebViewController(InAppWebViewController controller) {
    webViewController = controller;
  }
  
  // 加载状态变化
  void onLoadStart() {
    isLoading.value = true;
  }
  
  void onLoadStop() {
    isLoading.value = false;
  }
  
  // 导航状态更新
  void updateNavigationState() {
    webViewController?.canGoBack().then((value) {
      canGoBack.value = value;
    });
    webViewController?.canGoForward().then((value) {
      canGoForward.value = value;
    });
  }
  
  // 更新当前URL和标题
  void updatePageInfo(String? url, String? pageTitle) {
    if (url != null) currentUrl.value = url;
    if (pageTitle != null) title.value = pageTitle;
  }
  
  // 注册JavaScript回调函数
  void registerJsCallback(String name, Function callback) {
    jsCallbacks[name] = callback;
  }
  
  // 移除JavaScript回调函数
  void unregisterJsCallback(String name) {
    jsCallbacks.remove(name);
  }
  
  // 执行JavaScript代码
  Future<dynamic> evaluateJavaScript(String script) async {
    if (webViewController != null) {
      return await webViewController!.evaluateJavascript(source: script);
    }
    return null;
  }
  
  // 向Web页面发送消息
  Future<void> sendMessageToWeb(String message) async {
    final script = '''
      if (window.flutterMessageHandler) {
        window.flutterMessageHandler('$message');
      }
    ''';
    await evaluateJavaScript(script);
  }

  void handleNativeBridgeMessage(String message) {
    print('处理NativeBridge消息: $message');

    try {
      // 解析JSON消息
      final Map<String, dynamic> data = json.decode(message);
      final String action = data['action'] ?? '';
      final String webview = data['webview'] ?? '';
      final dynamic dataParam = data['data'];
      final Map<String, dynamic>? otherParams = data['otherParams'] != null
          ? Map<String, dynamic>.from(data['otherParams'])
          : null;

      print('解析消息 - action: $action, webview: $webview');

      switch (action) {
        case 'navigateBack':
          print('执行返回操作');
          Get.back();
          break;

        case 'navigateTo':
          print('执行导航到新页面');
          _handleNavigateTo(dataParam, webview);
          break;

        case 'redirectTo':
          print('执行重定向');
          _handleRedirectTo(dataParam, webview);
          break;

        case 'login':
          print('执行登录操作');
          _handleLogin();
          break;

        case 'activeLogin':
          print('执行主动登录');
          _handleActiveLogin();
          break;

        case 'setLockOrientation':
          print('设置屏幕方向');
          _handleSetLockOrientation(otherParams);
          break;

        case 'goHome':
          print('返回首页');
          _handleGoHome(data);
          break;

        case 'call':
          print('执行通话操作');
          _handleCall(dataParam);
          break;

        case 'initiateChat':
          print('发起聊天');
          _handleInitiateChat(dataParam);
          break;

        case 'aliPay':
          print('支付宝支付');
          _handleAliPay(dataParam);
          break;

        case 'wxPay':
          print('微信支付');
          _handleWxPay(dataParam);
          break;

        case 'joinLive':
          print('加入直播');
          _handleJoinLive(dataParam);
          break;

        case 'downloadFile':
          print('下载文件');
          _handleDownloadFile(dataParam);
          break;

        case 'upDateUser':
          print('更新用户信息');
          _handleUpdateUser(dataParam);
          break;

        case 'makePhoneCall':
          print('拨打电话');
          _handleMakePhoneCall(dataParam);
          break;

        case 'sendGood':
          print('发送商品');
          _handleSendGood(dataParam);
          break;

        default:
          print('未知的操作类型: $action');
      }
    } catch (e) {
      print('解析NativeBridge消息失败: $e');
    }
  }

  // 处理导航到新页面
  void _handleNavigateTo(dynamic dataParam, String webview) {
    print('导航到新页面: $dataParam, webview: $webview');

    // 根据webview类型构建基础URL
    String baseUrl = '';
    switch (webview) {
      case 'zWebView':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 货代URL
        break;
      case 'zWebViewOline':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 线上展会URL
        break;
      case 'zWebViewShop':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 商城URL
        break;
      case 'zWebViewDaixiao':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 代销URL
        break;
      default:
        print('未知的webview类型: $webview');
        return;
    }

    // 构建完整URL
    String fullUrl = baseUrl + dataParam.toString();

    // 导航到新的WebView页面
    Get.toNamed(
      Routes.WEBVIEW,
      arguments: {
        'url': fullUrl,
      },
    );
  }

  // 处理重定向
  void _handleRedirectTo(dynamic dataParam, String webview) {
    print('重定向到: $dataParam, webview: $webview');

    // 根据webview类型构建基础URL
    String baseUrl = '';
    switch (webview) {
      case 'zWebView':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 货代URL
        break;
      case 'zWebViewOline':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 线上展会URL
        break;
      case 'zWebViewShop':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 商城URL
        break;
      case 'zWebViewDaixiao':
        baseUrl = 'https://shop1.gluz.com.cn/ts/'; // 代销URL
        break;
      default:
        print('未知的webview类型: $webview');
        return;
    }

    // 构建完整URL
    String fullUrl = baseUrl + dataParam.toString();

    Get.offNamed(
      Routes.WEBVIEW,
      arguments: {
        'url': fullUrl,
      },
    );
  }

  // 处理登录
  void _handleLogin() {
    print('执行登录操作');
    // TODO: 实现登录逻辑
    // 可以调用Get.to()导航到登录页面
  }

  // 处理主动登录
  void _handleActiveLogin() {
    print('执行主动登录');
    // TODO: 实现主动登录逻辑
  }

  // 处理设置屏幕方向
  void _handleSetLockOrientation(Map<String, dynamic>? otherParams) {
    print('设置屏幕方向: $otherParams');
    // TODO: 实现屏幕方向设置
  }

  // 处理返回首页
  void _handleGoHome(Map<String, dynamic> data) {
    print('返回首页: $data');
    // TODO: 实现返回首页逻辑
  }

  // 处理通话
  void _handleCall(dynamic dataParam) {
    print('执行通话操作: $dataParam');
    // TODO: 实现通话逻辑
  }

  // 处理发起聊天
  void _handleInitiateChat(dynamic dataParam) {
    print('发起聊天: $dataParam');
    // TODO: 实现聊天逻辑
  }

  // 处理支付宝支付
  void _handleAliPay(dynamic dataParam) {
    print('支付宝支付: $dataParam');
    // TODO: 实现支付宝支付逻辑
  }

  // 处理微信支付
  void _handleWxPay(dynamic dataParam) {
    print('微信支付: $dataParam');
    // TODO: 实现微信支付逻辑
  }

  // 处理加入直播
  void _handleJoinLive(dynamic dataParam) {
    print('加入直播: $dataParam');
    // TODO: 实现直播逻辑
  }

  // 处理下载文件
  void _handleDownloadFile(dynamic dataParam) {
    print('下载文件: $dataParam');
    // TODO: 实现文件下载逻辑
  }

  // 处理更新用户信息
  void _handleUpdateUser(dynamic dataParam) {
    print('更新用户信息: $dataParam');
    // TODO: 实现用户信息更新逻辑
  }

  // 处理拨打电话
  void _handleMakePhoneCall(dynamic dataParam) {
    print('拨打电话: $dataParam');
    // TODO: 实现拨打电话逻辑
  }

  // 处理发送商品
  void _handleSendGood(dynamic dataParam) {
    print('发送商品: $dataParam');
    // TODO: 实现发送商品逻辑
  }
  
  // 导航方法
  void goBack() {
    if (canGoBack.value) {
      webViewController?.goBack();
    }
  }
  
  void goForward() {
    if (canGoForward.value) {
      webViewController?.goForward();
    }
  }
  
  void reload() {
    webViewController?.reload();
  }

  Future<void> injectCustomJavaScript() async {
    String script = '''
      // 创建全局消息处理器
      window.flutterMessageHandler = function(message) {
        console.log('收到Flutter消息:', message);
        // 这里可以处理来自Flutter的消息
      };
      
      // 向Flutter发送消息的函数
      window.sendMessageToFlutter = function(message) {
        if (window.flutter_inappwebview) {
          window.flutter_inappwebview.callHandler('onWebMessage', message);
        }
      };
      
      // 兼容原生Android/iOS的NativeBridge接口
      window.NativeBridge = {
        postMessage: function(json) {
          console.log('NativeBridge.postMessage 被调用:', json);
          console.log('flutter_inappwebview 对象:', window.flutter_inappwebview);
          if (window.flutter_inappwebview) {
            console.log('调用 flutter_inappwebview.callHandler');
            window.flutter_inappwebview.callHandler('NativeBridge', json);
          } else {
            console.log('flutter_inappwebview 对象不存在');
          }
        }
      };
      
      // 页面加载完成后的初始化
      document.addEventListener('DOMContentLoaded', function() {
        console.log('页面加载完成');
        console.log('NativeBridge 对象:', window.NativeBridge);
        // 可以在这里添加页面特定的初始化代码
      });
      
      // 立即检查NativeBridge是否可用
      console.log('NativeBridge 注入完成:', window.NativeBridge);
    ''';

    print('注入JavaScript脚本...');
    try {
      await webViewController?.evaluateJavascript(source: script);
      print('JavaScript注入成功');
    } catch (e) {
      print('JavaScript注入失败: $e');
    }
  }
} 